import request from "../util/request";
import {importExcel, regTest} from "@/util/util";
import _ from 'lodash'

/**
 * 工资表格式
 * @type {{}}
 */
export const salaryExcelHeaders = {
    '员工姓名': 'name',    // 员工姓名
    '身份证号': 'idCard',    // 身份证号

    '岗位工资': 'postSalary',
    '薪级工资': 'gradeSalary',
    '提高10%': 'enhanced',

    '基础绩效': 'baseMerit',
    '年末绩效': 'yearMerit',
    '超课时费': 'classFee',
    '学生管理费': 'studentFee',
    '专项奖惩': 'rewardOrPunish',
    '加班费': 'overtimePay',

    '工改保留': 'retention1',
    '改革性补贴': 'retention2',
    '2000年1月1日参加工作补贴': 'retention3',
    '人才引进专项补贴': 'retention4',
    '专职司机工作补助': 'retention5',
    '公务交通补贴': 'retention6',
    '独子费': 'retention7',
    '专业（学科）带头人津贴': 'retention8',
    '室主任津贴': 'retention9',
    '技师津贴': 'retention10',
    '卫生防疫津贴': 'retention11',
    '护龄津贴': 'retention12',
    '安保人员津贴及值班费': 'retention13',
    '保密、密码及信访工作岗位津贴': 'retention14',
    '思政课教师岗位津贴': 'retention15',
    '考务费及其他': 'retention16',

    '养老保险': 'insurance1',
    '职业年金': 'insurance2',
    '医疗保险': 'insurance3',
    '失业保险': 'insurance4',
    '住房公积金': 'insurance5'
}

// 任务状态
export const taskStatus = {
    0: '初始化',
    1: '设置中',
    2: '已完成'
}

/**
 * 获取参与
 */
export const getDeparts = function () {
    return request.get(`/depart/list?bonus=true`)
}

/**
 * 获取部门列表
 */
export const getDepartItems = function () {
    return request.get("/salary/depart/items")
}

/**
 * 获取部门员工列表信息
 * @param departId
 */
export const getEmployees = function (departId) {
    return request.get(`/salary/employee/items/${departId}`)
}

/**
 * 设置部门工资员
 * @param depart
 */
export const setClerk = function (depart) {
    return request.put(`/salary/depart/setClerk/${depart.id}/${depart.clerkId}`)
}

/**
 * 获取员工列表
 * @param current
 * @param size
 */
export const list = function (params) {
    return request.post(`/salary/list`, params)
}

/**
 * 导入工资列表
 */
export const initSalarys = function () {
    return request.put("/salary/init")
}

/**
 * 保存工资信息
 * @param salary
 */
export const saveSalary = function (salary) {
    return request.put("/salary/modify", salary)
}

/**
 * 从Excel读取数据
 * @param file
 * @param dics
 * @returns {Promise<unknown>}
 */
export const importSalaryFromExcel = function (file) {
    return importExcel(file, salaryExcelHeaders).then(list => {
        return new Promise(function (resolve, reject) {
            _.forEach(list, function(salary) {
                // 0、姓名
                if(!regTest("name", salary.name)) {
                    reject(salary.name + '-姓名不正确')
                }
                // 0、身份证号
                if(!regTest("idCard", salary.idCard)) {
                    reject(salary.idCard + '-身份证号不正确')
                }

                // 1、岗位工资
                if(!regTest("money", salary.postSalary)) {
                    reject(`${salary.employeeId}-${salary.postSalary}-岗位工资设置有误`)
                }
                // 2、薪级工资
                if(!regTest("money", salary.gradeSalary)) {
                    reject(`${salary.employeeId}-${salary.gradeSalary}-薪级工资设置有误`)
                }
                // 3、岗位工资
                if(!regTest("money", salary.enhanced)) {
                    reject(`${salary.employeeId}-${salary.enhanced}-提高10%设置有误`)
                }

                // 1、基础绩效
                if(!regTest("money", salary.baseMerit)) {
                    reject(`${salary.employeeId}-${salary.baseMerit}-基础绩效设置有误`)
                }


                // 1、工改保留
                if(!regTest("money", salary.retention1)) {
                    reject(`${salary.employeeId}-${salary.retention1}-工改保留设置有误`)
                }
                // 2、改革性补贴
                if(!regTest("money", salary.retention2)) {
                    reject(`${salary.employeeId}-${salary.retention2}-改革性补贴设置有误`)
                }
                // 3、2000年1月1日参加工作补贴
                if(!regTest("money", salary.retention3)) {
                    reject(`${salary.employeeId}-${salary.retention3}-2000年1月1日参加工作补贴设置有误`)
                }
                // 4、人才引进专项补贴
                if(!regTest("money", salary.retention4)) {
                    reject(`${salary.employeeId}-${salary.retention4}-人才引进专项补贴设置有误`)
                }
                // 5、专职司机工作补助
                if(!regTest("money", salary.retention5)) {
                    reject(`${salary.employeeId}-${salary.retention5}-专职司机工作补助设置有误`)
                }
                // 6、公务交通补贴
                if(!regTest("money", salary.retention6)) {
                    reject(`${salary.employeeId}-${salary.retention6}-公务交通补贴设置有误`)
                }
                // 7、独子费
                if(!regTest("money", salary.retention7)) {
                    reject(`${salary.employeeId}-${salary.retention7}-独子费设置有误`)
                }
                // 8、专业（学科）带头人津贴
                if(!regTest("money", salary.retention8)) {
                    reject(`${salary.employeeId}-${salary.retention8}-专业（学科）带头人津贴设置有误`)
                }
                // 9、室主任津贴
                if(!regTest("money", salary.retention9)) {
                    reject(`${salary.employeeId}-${salary.retention9}-室主任津贴设置有误`)
                }
                // 10、技师津贴
                if(!regTest("money", salary.retention10)) {
                    reject(`${salary.employeeId}-${salary.retention10}-技师津贴设置有误`)
                }
                // 11、卫生防疫津贴
                if(!regTest("money", salary.retention11)) {
                    reject(`${salary.employeeId}-${salary.retention11}-卫生防疫津贴设置有误`)
                }
                // 12、护龄津贴
                if(!regTest("money", salary.retention12)) {
                    reject(`${salary.employeeId}-${salary.retention12}-护龄津贴设置有误`)
                }
                // 13、安保人员津贴及值班费
                if(!regTest("money", salary.retention13)) {
                    reject(`${salary.employeeId}-${salary.retention13}-安保人员津贴及值班费设置有误`)
                }
                // 14、保密、密码及信访工作岗位津贴
                if(!regTest("money", salary.retention14)) {
                    reject(`${salary.employeeId}-${salary.retention14}-保密、密码及信访工作岗位津贴设置有误`)
                }
                // 15、思政课教师岗位津贴
                if(!regTest("money", salary.retention15)) {
                    reject(`${salary.employeeId}-${salary.retention15}-思政课教师岗位津贴设置有误`)
                }
                // 16、考务费及其他
                if(!regTest("money", salary.retention16)) {
                    reject(`${salary.employeeId}-${salary.retention16}-考务费及其他设置有误`)
                }

                // 1、养老保险
                if(!regTest("money", salary.insurance1)) {
                    reject(`${salary.employeeId}-${salary.insurance1}-养老保险设置有误`)
                } // 2、职业年金
                if(!regTest("money", salary.insurance2)) {
                    reject(`${salary.employeeId}-${salary.insurance2}-职业年金设置有误`)
                } // 3、医疗保险
                if(!regTest("money", salary.insurance3)) {
                    reject(`${salary.employeeId}-${salary.insurance3}-医疗保险设置有误`)
                } // 4、失业保险
                if(!regTest("money", salary.insurance4)) {
                    reject(`${salary.employeeId}-${salary.insurance4}-失业保险设置有误`)
                } // 5、住房公积金
                if(!regTest("money", salary.insurance5)) {
                    reject(`${salary.employeeId}-${salary.insurance5}-住房公积金设置有误`)
                }
            })
            resolve(list)
        })
    })
}

/**
 * 上传数据列表
 * @param list
 */
export const uploadSalaries = function (list) {
    return request.put("/salary/import", list)
}

/**
 * 分页查询任务列表
 * @param page
 * @param size
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getTaskList = function (page, size) {
    return request.get(`/salary_task/list?current=${page}&size=${size}`)
}

/**
 * 分页查询任务列表
 * @param page
 * @param size
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getPagedTasks = function (page, size) {
    return request.get(`/salary_task/list/${page}/${size}`)
}

/**
 * 分页查询指定状态的任务列表
 * @param page
 * @param size
 * @param statu
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getTasksOfStatu = function (page, size, statu) {
    return request.get(`/salary_task/list/${statu}?current=${page}&size=${size}`)
}

/**
 * 获取绩效部门列表
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getDepartList = function () {
    return request.get('/salary_task_depart/departs')
}

/**
 * 保存任务信息
 * @param newTask
 */
export const saveTask = function (newTask) {
    return request.put('/salary_task/create', newTask)
}

/**
 * 修改任务状态
 */
export const changeStatus = (taskId, statu) => {
    return request.put(`/salary_task/change_statu/${taskId}/${statu}`)
}

/**
 * 删除任务
 * @param taskId
 * @returns {Promise<AxiosResponse<any>>}
 */
export const deleteTask = (taskId) => {
    return request.delete(`/salary_task/delete/${taskId}`)
}

/**
 * 获取任务部门列表
 * @param taskId
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getTaskDeparts = (taskId) => {
    return request.get(`/salary_task_depart/task/departs/${taskId}`)
}

/**
 * 获取部门员工工资列表
 * @param taskDepartId
 */
export const getSalariesOfDepart = (taskDepartId) => {
    return request.get(`/salary_item/list/depart/${taskDepartId}`)
}

/**
 * 保存员工绩效工资
 * @param bonus
 * @returns {Promise<AxiosResponse<any>>}
 */
export const saveBonus = (bonus) => {
    return request.put('/salary_item/saves', bonus)
}

/**
 * 设置绩效工资
 * @param id
 * @param bonus
 */
export const setBouns = (id, bonus) => {
    return request.put(`/salary_item/set_bonus/${id}/${bonus}`)
}

/**
 * 完成部门任务
 */
export const finishDepartTask = (departTaskId) => {
    return request.put(`/salary_task_depart/finish/${departTaskId}`)
}

/**
 * 获取各部门任务列表
 * @param taskId
 */
export const getDepartTasks = (taskId) => {
    return request.get(`/salary_task_depart/departs/status/${taskId}`)
}

/**
 * 重置部门任务
 * @param departTaskId
 */
export const resetDepartTaskById = (departTaskId) => {
    return request.put(`/salary_task_depart/depart/reset/${departTaskId}`)
}